package cn.calin.day05.demo43HashMap;

import jdk.jshell.PersistentSnippet;

import java.util.*;

/*
    HashMap存储自定义类型键值
    Map集合保证key是唯一的：
        作为key的元素，必须重写hashCode方法和equals方法以保证key唯一
 */
public class Demo01HashMapSavePerson {
    public static void main(String[] args) {
        show02();
    }
    /*
        HashMap存储自定义类型键值
        key：Person类型
            Person类必须重写hashCode方法和equals方法以保证key唯一
        value：String类型
             可以重复
     */

    private static void show02() {
        //创建HashMap集合
        HashMap<Person,String> map=new HashMap<>();
        //往集合里添加元素
        map.put(new Person("女王",18),"英国");
        map.put(new Person("秦始皇",18),"秦国");
        map.put(new Person("普京",18),"俄罗斯");
        map.put(new Person("女王",18),"毛里求斯");
        //使用entrySet和增强for循环遍历Map集合
        Set<Map.Entry<Person, String>> set = map.entrySet();
        for (Map.Entry<Person,String> entry:
                map.entrySet()) {
            Person key=entry.getKey();
            String value = entry.getValue();
            System.out.println(key+"->"+value);//Person{name='女王', age=18}->毛里求斯
                                               //Person{name='秦始皇', age=18}->秦国
                                                //Person{name='普京', age=18}->俄罗斯
            //迭代器遍历Map集合
            Iterator<Map.Entry<Person,String>> it=map.entrySet().iterator();
            while (it.hasNext()){
                Map.Entry<Person, String> s = it.next();
                Person key1 = s.getKey();
                String value1 = s.getValue();
                System.out.println(key1+"->"+value1);
            }

        }

    }

    /*
        HashMap存储自定义类型键值
        key：String类型
            String类重写hashCode方法和equals方法，可以保证key唯一
        value：person类型
            value可以重复（同名同年龄的视为同一个人）
     */
    private static void show01() {
        //创建HashMap集合
        HashMap<String,Person> map=new HashMap<>();
        //往集合中添加元素
        map.put("北京",new Person("张三",18));
        map.put("上海",new Person("李四",19));
        map.put("广州",new Person("王五",20));
        map.put("北京",new Person("赵六",18));
        //使用keySet加增强for遍历Map集合
        Set<String> set = map.keySet();
        for (String key :
                map.keySet()) {
            Person value=map.get(key);
            System.out.println(key+"——>"+value);
        }
    }
}
